stata

您所在的位置:网站首页 stata if else语句 stata

stata

2024-02-26 21:27| 来源: 网络整理| 查看: 265

3 个答案:

答案 0 :(得分:8)

这是一个仍然感兴趣的旧线程,因此第一轮忽略的材料和技术仍然适用。

更通用的技术是使用总计。最简单的是,总共有其他=总数 - 这个值。在egen框架中看起来像

egen total = total(price), by(market) egen n = total(!missing(price)), by(market) gen avprice = (total - cond(missing(price), 0, price)) / cond(missing(price), n, n - 1)

total() egen函数忽略其参数中的缺失值。如果缺少值,我们不希望将它们包含在计数中,但是我们可以使用!missing(),如果没有丢失则产生1,如果缺少则产生0。 egen的{​​{1}}是另一种方法。

如果出现错误,前面给出的代码会给出错误答案,因为它们包含在计数count()中。

即使缺少一个值,其他值的平均值仍然有意义。

如果没有缺少值,则上面的最后一行简化为

_N

到目前为止,这可能看起来只不过是以前代码的一个小变体,但它确实很容易扩展到使用权重。据推测,我们希望给出一些gen avprice = (total - price) / (n - 1) 的其他价格的加权平均值。我们可以利用weight对表达式起作用的事实,这可能比变量名更复杂。事实上,上面的代码已经做到了,但它经常被忽视。

total()

与以前一样,如果缺少egen wttotal = total(weight * price), by(market) egen sumwt = total(weight), by(market) gen avprice = (wttotal - price * weight) / (sumwt - weight) 或price,则需要更复杂的代码,或者只是为了确保从计算中排除此类观察结果。

另见Stata FAQ

如何为组中其他成员的每个属性创建变量汇总?

http://www.stata.com/support/faqs/data-management/creating-variables-recording-properties/

进行更广泛的讨论。

(如果数字变大,请使用weight s。)

编辑2018年3月2日这是旧帖子中的新帖子,而后者又需要更新。 double(SSC)可以在这里使用,并提供单行解决方案。毫不奇怪,为这类问题明确添加了选项rangestat。但是,尽管使用身份,手段的解决方案很容易

其他人的意思=(总数 - 自我价值)/(数字-1)

许多其他摘要测量不会产生类似的简单技巧,因此excludeself包含更多通用编码。

rangestat

答案 1 :(得分:7)

这是一种避免显式循环的方法,尽管它需要几行代码:

by Market: egen Total = total(Price) replace Total = Total - Price by Market: gen AvRivalPrice = Total / (_N-1) drop Total

答案 2 :(得分:5)

这是一个较短的解决方案,其中包含较少的线条,将您的原始思想与@ onestop的解决方案相结合:

egen AvPrice = mean(price), by(Market) bysort Market: replace AvPrice = (AvPrice*_N - price)/(_N-1)

这对公司普查来说都很有用。如果您有公司的样本,并且您需要应用权重,我不确定什么是好的解决方案。如果需要,我们可以集思广益。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3